
//
//int n, pa[1000], tail;
//int main()
//{
//	cin >> n;
//	int count = 0, sum = 0;
//	for (int i = 0; i < n; i++)
//	{
//		int x = 0;
//		cin >> x;
//		if (x == 1) sum++;
//		if (i != 0 && x == 1)
//			pa[tail++] = count,count=0;
//		count++;
//	}
//	pa[tail++] = count;
//	cout << sum << endl;
//	for (int i = 0; i < sum; i++) cout << pa[i] << " ";
//	cout << endl;
//	return 0;
//}

//using namespace std;
//
//int find_len(string s1, string s2)
//{
//	int tail1 = s1.size() - 1;
//	int tail2 = s2.size() - 1;
//	int count = 0;
//	while (s1[tail1] == s2[tail2]&&tail1>0&&tail2>0)
//	{
//		count += 2;
//		tail1--, tail2--;
//	}
//	if(s1[tail1] == s2[tail2]) count += 2;
//	return s1.size() + s2.size() - count;
//}
//
//int main()
//{
//	string s1, s2;
//	s1.resize(200010, '\0');
//	s2.resize(200010, '\0');
//	cin >> s1 >> s2;
//	int ret = 0;
//	ret=find_len(s1, s2);
//	cout << ret << endl;
//	return 0;
//}

#include<iostream>
#include<string>
using namespace std;

int find_max(char a[],int size)
{
	int count = 0;
	for (int i = 0; i < size; i++)
		if ((a[i] - '0') % 3 == 0) count++, na[i] = 1;
	for (int i = 0; i < size; i++)
		if (na[i] == 0)
		{
			int j = 1;
			while (na[i + j] == 0)
			{
				int sum = 0;
				for (int w = 0; w <= j; w++)
				{
					sum += (a[i + w] - '0') * (int)pow(10, j-w);
					na[i + w] = 1;
				}
				if (sum % 3 == 0) count++;
			    j++;
			}
		}
	return count;
}
char a[200010];int na[200010];
int main()
{
	cin >> a;
	int sz = sizeof(a) / sizeof(char);
	int ret = find_max(a,sz);
	cout << ret<<endl;
	return 0;
}